package tipo;

import java.sql.SQLException;
import java.util.ArrayList;

import marca.CadastroMarca;
import marca.marcaExceptions.MarcaTipoNaoInformadoException;
import tipo.tipoExceptions.NenhumTipoCadastradoException;
import tipo.tipoExceptions.TipoJaCadastradoException;
import tipo.tipoExceptions.TipoNaoCadastradoException;
import tipo.tipoExceptions.TipoNaoInformadoException;
import tipo.tipoExceptions.TipoNomeNaoInformadoException;
import tipo.tipoExceptions.TipoTemMarcasCadastradasException;

public class CadastroTipo {
	
	private ITipo repTipo;
	
	public CadastroTipo(){
		repTipo = new RepositorioTipoBanco();
	}
	
	public void adicionar(Tipo tipo) throws TipoNaoInformadoException, TipoNomeNaoInformadoException, TipoJaCadastradoException, ClassNotFoundException, SQLException{
		
		if(existe(tipo.getId()) == 1){
			throw new TipoJaCadastradoException();
		}else if(tipo.getNome() == null || tipo.getNome().trim().isEmpty()){
			throw new TipoNomeNaoInformadoException();
		}else{
			this.repTipo.adicionar(tipo);
		}
	}
	
	public void editar(Tipo tipo) throws TipoNaoInformadoException, TipoNomeNaoInformadoException, TipoNaoCadastradoException, ClassNotFoundException, SQLException{
		if(tipo.getId() < 0){
			throw new TipoNaoInformadoException();
		}else if(existe(tipo.getId()) == 0){
			throw new TipoNaoCadastradoException();
		}else if(tipo.getNome() == null || tipo.getNome().trim().isEmpty()){
			throw new TipoNomeNaoInformadoException();
		}else{
			this.repTipo.editar(tipo);
		}
	}
	
	public Tipo pesquisar(int idTipo) throws TipoNaoInformadoException, TipoNaoCadastradoException, ClassNotFoundException, SQLException{
		Tipo tipo = null;
		if(idTipo< 0){
			throw new TipoNaoInformadoException();
		}else{
			tipo = this.repTipo.pesquisar(idTipo);
			if(tipo == null){
				throw new TipoNaoCadastradoException();
			}
		}
		return tipo;
	}
	
	public void remover(int idTipo) throws TipoNaoInformadoException, TipoNaoCadastradoException, MarcaTipoNaoInformadoException, TipoTemMarcasCadastradasException, ClassNotFoundException, SQLException{
		CadastroMarca cadMarca = new CadastroMarca();
		if(idTipo < 0){
			throw new TipoNaoInformadoException();
		}else if(existe(idTipo) == 0){
			throw new TipoNaoCadastradoException();
		}else if(cadMarca.listar(idTipo).size() > 0){
			throw new TipoTemMarcasCadastradasException();
		}else{
			this.repTipo.remover(idTipo);
		}
	}
	
	
	
	public ArrayList<Tipo> listar() throws ClassNotFoundException, SQLException{
		return	this.repTipo.listar();
			
	}
	
	public ArrayList<Tipo> listar(String nome) throws TipoNomeNaoInformadoException, ClassNotFoundException, SQLException{
		if(nome.trim().isEmpty()){
			throw new TipoNomeNaoInformadoException();
		}
		return this.repTipo.listar(nome);
	}
	
	public int existe(int idTipo) throws ClassNotFoundException, SQLException {
		return this.repTipo.existe(idTipo);
	}
}
